home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / func3d.arj / FUENTE / STRINGS.AS_ / STRINGS.AS
Encoding:
Text File  |  1994-05-06  |  7.7 KB  |  395 lines

  1. ;
  2. ;   Fichero: STRINGS.ASM
  3. ;
  4. ;   Versi≤n: 1.0
  5. ;     Autor: Antonio M. EstΘvez Lorenzo
  6. ; Prop≤sito: Funciones para el manejo de cadenas
  7. ;
  8. ; Para ensamblar: TASM /ml strings
  9. ;                      /ml -> Sensible a may·sculas/min·sculas
  10. ;
  11.  
  12.         .MODEL  large,C
  13.  
  14.  
  15.          EXTRN  pascal @$bnew$qui: PROC
  16.  
  17. ENTRADA  MACRO
  18.          PUSH   DS
  19.          PUSH   SI
  20.          PUSH   DI
  21.          ENDM
  22.  
  23. SALIDA   MACRO
  24.          POP    DI
  25.          POP    SI
  26.          POP    DS
  27.          RET
  28.          ENDM
  29.  
  30.          LOCALS @@
  31.  
  32.         .CODE
  33.  
  34.  
  35. NewStr   PROC   C Cad: DWORD
  36.          PUBLIC NewStr
  37.          ENTRADA
  38.  
  39.          LDS    SI,Cad
  40.          XOR    CX,CX
  41.          CLD
  42. @@1:     INC    CX
  43.          LODSB
  44.          OR     AL,AL
  45.          JNZ    @@1
  46.          PUSH   CX
  47.          CALL   @$bnew$qui
  48.          POP    CX
  49.          MOV    DI,AX
  50.          MOV    ES,DX
  51.          MOV    BX,AX
  52.          OR     BX,DX
  53.          JZ     @@2
  54.          LDS    SI,Cad
  55.          CLD
  56.          REP    MOVSB
  57. @@2:
  58.          SALIDA
  59. NewStr   ENDP
  60.  
  61. StrCpy   PROC   C Dest: DWORD, Orig: DWORD
  62.          PUBLIC StrCpy
  63.          ENTRADA
  64.  
  65.          LDS    SI,Orig
  66.          LES    DI,Dest
  67.          CLD
  68. @@1:     LODSB
  69.          STOSB
  70.          OR     AL,AL
  71.          JNZ    @@1
  72.  
  73.          SALIDA
  74. StrCpy   ENDP
  75.  
  76.  
  77. StrMov   PROC   C Dest: DWORD, Orig: DWORD, Long: WORD
  78.          PUBLIC StrMov
  79.          ENTRADA
  80.  
  81.          LDS    SI,Orig
  82.          LES    DI,Dest
  83.          MOV    CX,Long
  84.          CLD
  85.          OR     CX,CX
  86.          JZ     @@1
  87.          DEC    CX
  88.          REP    MOVSB
  89. @@1:     XOR    AL,AL
  90.          STOSB
  91.  
  92.          SALIDA
  93. StrMov   ENDP
  94.  
  95. StrUne   PROC   C Dest: DWORD, Str1: DWORD, Str2: DWORD
  96.          PUBLIC StrUne
  97.          ENTRADA
  98.  
  99.          LES    DI,Dest
  100.          LDS    SI,Str1
  101.          CLD
  102. @@1:     LODSB 
  103.          OR     AL,AL
  104.          JZ     @@2
  105.          STOSB
  106.          JMP    @@1
  107. @@2:     LDS    SI,Str2
  108. @@3:     LODSB
  109.          STOSB
  110.          OR     AL,AL
  111.          JNZ    @@3
  112.  
  113.          SALIDA
  114. StrUne   ENDP
  115.  
  116. StrEqu   PROC   C Str1: DWORD, Str2: DWORD
  117.          PUBLIC StrEqu
  118.          ENTRADA
  119.  
  120.          LDS    SI,Str1
  121.          LES    DI,Str2
  122.          MOV    AX,DS
  123.          OR     AX,SI
  124.          JZ     @@0
  125.          MOV    AX,ES
  126.          OR     AX,DI
  127.          JZ     @@0
  128. @@1:     LODSB
  129.          CMP    AL,32
  130.          JZ     @@1
  131. @@2:     MOV    CL,ES:[DI]
  132.          INC    DI
  133.          CMP    CL,32
  134.          JZ     @@2
  135.          MOV    CH,AL
  136.          JCXZ   @@3
  137.          OR     CX,2020H
  138.          CMP    CL,CH
  139.          JE     @@1
  140. @@0:     XOR    AX,AX
  141.          JMP    SHORT @@4
  142. @@3:     MOV    AX,1
  143. @@4:
  144.          SALIDA
  145. StrEqu   ENDP
  146.  
  147. StrSep   PROC   C Str1: DWORD, Str2: DWORD, Sep: BYTE
  148.          PUBLIC StrSep
  149.          ENTRADA
  150.  
  151.          LDS    SI,Str1
  152.          LES    DI,Str2
  153.          XOR    BL,BL
  154.          MOV    ES:[DI],BL
  155.          MOV    AH,Sep
  156. @@1:     MOV    AL,[SI]
  157.          OR     AL,AL
  158.          JZ     @@5
  159.          CMP    AL,AH
  160.          JZ     @@2
  161.          INC    SI
  162.          JMP    @@1
  163. @@2:     MOV    [SI],BL
  164.          INC    SI
  165. @@3:     LODSB
  166.          OR     AL,AL
  167.          JZ     @@5
  168.          CMP    AL,32
  169.          JE     @@3
  170. @@4:     STOSB
  171.          OR     AL,AL
  172.          JZ     @@5
  173.          LODSB
  174.          JMP    @@4
  175. @@5:     
  176.          SALIDA
  177. StrSep   ENDP
  178.  
  179. PrNum1   PROC   NEAR
  180.          XOR    DX,DX
  181.          DIV    CX
  182.          OR     AL,AL
  183.          JNE    PrNum2
  184.          OR     BL,BL
  185.          JE     PrNum3
  186. PrNum2:  MOV    BL,1
  187.          ADD    AL,'0'
  188.          STOSB
  189. PrNum3:  MOV    AX,DX
  190.          RET
  191. PrNum1   ENDP
  192.  
  193. IntToSt  PROC   C String: DWORD, Num: WORD
  194.          PUBLIC IntToSt
  195.          PUSH   DI
  196.  
  197.          CLD
  198.          LES    DI,String
  199.          MOV    CX,Num
  200.          OR     CX,CX
  201.          JGE    @@1
  202.          MOV    AL,'-'
  203.          STOSB
  204.          NEG    CX
  205. @@1:     MOV    AX,CX
  206.          XOR    BL,BL
  207.          MOV    CX,10000
  208.          CALL   PrNum1
  209.          MOV    CX,1000
  210.          CALL   PrNum1
  211.          MOV    CX,100
  212.          CALL   PrNum1
  213.          MOV    CX,10
  214.          CALL   PrNum1
  215.          ADD    AL,'0'
  216.          XOR    AH,AH
  217.          STOSW
  218.  
  219.          POP    DI
  220.          RET
  221. IntToSt  ENDP
  222.  
  223. StToInt  PROC   C Cad: DWORD, Num: DWORD
  224.          PUBLIC StToInt
  225.          PUSH   DS
  226.          PUSH   SI
  227.  
  228.          CLD
  229.          XOR    CX,CX
  230.          MOV    BL,CL
  231.          LDS    SI,Cad
  232.          LODSB
  233.          OR     AL,AL
  234.          JZ     @@2
  235.          CMP    AL,'-'
  236.          JNE    @@1
  237.          INC    BL
  238.          LODSB
  239.          OR     AL,AL
  240.          JZ     @@3
  241. @@1:     SUB    AL,'0'
  242.          CMP    AL,9
  243.          JA     @@3
  244.          MOV    BH,AL
  245.          MOV    AX,10
  246.          MUL    CX
  247.          TEST   AH,80H
  248.          JNZ    @@3
  249.          OR     DX,DX
  250.          JNZ    @@3
  251.          MOV    CX,AX
  252.          MOV    AL,BH
  253.          XOR    AH,AH
  254.          ADD    CX,AX
  255.          LODSB
  256.          OR     AL,AL
  257.          JNZ    @@1
  258. @@2:     MOV    AX,1
  259.          OR     BL,BL
  260.          JZ     @@4
  261.          NEG    CX
  262.          JMP    SHORT @@4
  263. @@3:     XOR    AX,AX
  264.          MOV    CX,AX
  265. @@4:     LDS    SI,Num
  266.          MOV    [SI],CX
  267.  
  268.          POP    SI
  269.          POP    DS
  270.          RET
  271. StToInt  ENDP
  272.  
  273. IntValido PROC  C Cad: DWORD, Num: DWORD, Min: WORD, Max: WORD
  274.          PUBLIC IntValido
  275.          CALL   StToInt C, Cad, Num
  276.          OR     AL,AL
  277.          JZ     @@2
  278.          PUSH   DI
  279.          LES    DI,Num
  280.          MOV    CX,ES:[DI]
  281.          POP    DI
  282.          CMP    CX,Min
  283.          JL     @@1
  284.          CMP    CX,Max
  285.          JLE    @@2
  286. @@1:     XOR    AX,AX
  287. @@2:     RET
  288. IntValido ENDP
  289.  
  290.  
  291. Separa   PROC   NEAR
  292.          MOV    BX,ES
  293.          OR     BX,DI
  294.          JZ     @@3
  295. Separa1  LABEL  NEAR
  296. @@1:     LODSB
  297.          CMP    AL,','
  298.          JZ     @@2
  299.          STOSB
  300.          OR     AL,AL
  301.          JZ     @@3
  302.          JMP    @@1
  303. @@2:     XOR    AL,AL
  304.          STOSB
  305.          INC    AL
  306. @@3:     RET
  307. Separa   ENDP
  308.  
  309. SeparaParam PROC C Orig:DWORD, Par1:DWORD, Par2:DWORD, Par3:DWORD
  310.          PUBLIC SeparaParam
  311.          ENTRADA
  312.  
  313.          CLD
  314.          XOR    AL,AL
  315.          LES    DI,Par2
  316.          MOV    BX,ES
  317.          OR     BX,DI
  318.          JZ     @@0
  319.          STOSB
  320. @@0:     LES    DI,Par3
  321.          MOV    BX,ES
  322.          OR     BX,DI
  323.          JZ     @@1
  324.          STOSB
  325. @@1:     LES    DI,Par1
  326.          LDS    SI,Orig
  327.          STOSB
  328.          DEC    DI
  329.          CALL   Separa1
  330.          JZ     @@4
  331.          LES    DI,Par2
  332.          CALL   Separa
  333.          JZ     @@4
  334.          LES    DI,Par3
  335.          CALL   Separa
  336.  
  337. @@4:     SALIDA
  338. SeparaParam ENDP
  339.  
  340. Mayusculas PROC C Cad: DWORD
  341.          PUBLIC Mayusculas
  342.          ENTRADA
  343.  
  344.          XOR    BX,BX
  345.          LES    DI,Cad
  346.          LDS    SI,Cad
  347.          CLD
  348. @@1:     LODSB
  349.          CMP    AL,32
  350.          JZ     @@1
  351.          OR     AL,AL
  352.          JZ     @@3
  353.          INC    BX
  354.          CMP    AL,'a'
  355.          JB     @@2
  356.          CMP    AL,'z'
  357.          JA     @@2
  358.          SUB    AL,'a'-'A'
  359. @@2:     STOSB
  360.          JMP    @@1
  361. @@3:     MOV    AX,BX
  362.  
  363.          SALIDA
  364. Mayusculas ENDP
  365.  
  366. LongStr  PROC   C Orig: DWORD
  367.          PUBLIC LongStr
  368.          LES    BX,Orig
  369.          XOR    AX,AX
  370. @@1:     CMP    BYTE PTR ES:[BX],0
  371.          JZ     @@2
  372.          INC    AX
  373.          INC    BX
  374.          JMP    @@1
  375. @@2:     RET
  376. LongStr  ENDP
  377.  
  378. GetDirStr PROC   C Direc: DWORD
  379.           PUBLIC GetDirStr
  380.           LES    BX,Orig
  381. @@0:      MOV    CX,BX
  382. @@1:      MOV    AL,ES:[BX]
  383.           INC    BX
  384.           OR     AL,AL
  385.           JZ     @@2
  386.           CMP    AL,'\'
  387.           JNZ    @@1
  388.           JMP    @@0
  389. @@2:      MOV    BX,CX
  390.           MOV    BYTE PTR ES:[BX],0
  391.           RET
  392. GetDirStr ENDP
  393.  
  394.          END
  395.